package com.jdrx.ocp.beans.commons;

import com.jdrx.platform.common.support.gateway.GwConstants;
import com.jdrx.platform.jdbc.beans.entry.BasePO;
import org.apache.commons.lang3.StringUtils;

import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

public class AuthCommons {


    /**
     * 获取部分HttpServletRequest中的参数转换为BasePo，方便新增、插入的时候写入"创建信息"或"修改信息"；
     *
     * @param request controller 的HttpServletRequest
     * @param flag    新增操作还是更新操作
     * @return
     */
    public static BasePO paraAssemble(HttpServletRequest request, String flag) {

        BasePO po = new BasePO();
        //TODO  start 此参数为网关传入，目前无此参数只做测试使用，等待测试环境具备传入userId参数后需要排除默认值为1的情况
        Integer userId = Integer.parseInt(request.getHeader(GwConstants.TRANSPARENT_USERID_FEILD) == null ? "1" : request.getHeader(GwConstants.TRANSPARENT_USERID_FEILD));
        //TODO  end 此参数为网关传入，目前无此参数只做测试使用，等待测试环境具备传入userId参数后需要排除默认值为1的情况
        switch (flag) {
            case SysConstant.OPERATE_CREATE:
                po.setCreateAt(new Date());
                po.setCreateBy(userId);
                break;
            default:
                po.setUpdateAt(new Date());
                po.setUpdateBy(userId);
                break;
        }
        return po;

    }


    /**
     *
     * @param ids 以逗号分割
     * @return
     */
    /**
     * 把字符串,按照指定分隔符分成数组,注意转义字符的使用 如 .应该为 \\.
     *
     * @return
     */
    public static List<Long> split2IntArray(String baseString, String reg) {

        List resultArr = new ArrayList();
        String[] resultTemp = new String[1];
        if (baseString.contains(reg)) {
            resultTemp = baseString.split(reg);
            for (int i = 0; i < resultTemp.length; i++) {
                try {
                    if (StringUtils.isNotEmpty(resultTemp[i])) {
                        resultArr.add(Integer.parseInt(resultTemp[i]));
                    }
                } catch (Exception ex) {
                    continue;
                }
            }
        } else {
            try {
                int i = Integer.parseInt(baseString);
                resultArr.add(i);
            } catch (Exception ex) {
                // do nothing
            }
        }
        return resultArr;
    }

    /**
     * @param baseString
     * @param reg
     * @return
     */
    public static List<String> split2StringArray(String baseString, String reg) {

        List resultArr = new ArrayList();
        String[] resultTemp = new String[1];
        if (baseString.contains(reg)) {
            resultTemp = baseString.split(reg);
            for (int i = 0; i < resultTemp.length; i++) {
                try {
                    resultArr.add(resultTemp[i]);
                } catch (Exception ex) {
                    continue;
                }
            }
        } else {
            resultArr.add(baseString);
        }
        return resultArr;
    }


    /**
     * 替换路径参数值， 如 /v1/0/user/$1123/queryUserInfo 替换为 /v1/0/user/$/queryUserInfo，/v1/0/user/$1123/$23432432/queryUserInfo 为/v1/0/user/$/$/queryUserInfo
     *
     * @param uri
     * @return
     */
    public static String replaceVariable(String uri) {
        if (uri.contains("$")) {
            StringBuffer sb = new StringBuffer();
            String[] temp = uri.split("\\$");
            sb.append(temp[0]).append("$");
            for (int i = 1; i < temp.length; i++) {
                sb.append(temp[i].substring(temp[i].indexOf("/")));
                if (i < temp.length - 1) {
                    sb.append("$");
                }
            }
            uri = sb.toString();
        }
        return uri;
    }

}


